class Solution {
public:
    bool isValid(string s) {
        stack<char>stk;
        if(s.empty()){
            return true;
        }
        for(auto c :s){
            if(c=='(' || c=='[' || c=='{'){
                stk.push(c);
            }
            else{
                if(stk.empty()){
                    return false;
                }
                else{
                    if(c==')'){
                        if(stk.top()!='('){
                            return false;
                        }
                        else{
                            stk.pop();
                        }
                    }
                    else if(c==']'){
                        if(stk.top()!='['){
                            return false;
                        }
                        else{
                            stk.pop();
                        }
                    }
                    else if(c=='}'){
                        if(stk.top()!='{'){
                            return false;
                        }
                        else{
                            stk.pop();
                        }
                    }
                }
            }
        }
        return stk.empty();
    }
};